package com.mdnote.structure.sort;

import java.util.Arrays;

/**
 * @author Rhythm-2019
 * @version 1.0
 * @date 2020/8/25
 * @description 冒泡排序
 */
public class BubbleSort {

    /**
     * 排序
     * @param source 数组
     */
    public static void sort(int[] source) {

        // 冒泡排序，主要思想是把小的数网数组最后丢，范围从后往前回缩
        int temp = 0;
        // 控制范围
        for (int i = 0; i < source.length; i++) {
            for (int j = 0; j < source.length - 1 - i; j++) {
                // 和后面的元素比较，把小的数送到最后
                if (source[j] < source[j + 1]) {
                    temp = source[j];
                    source[j] = source[j + 1];
                    source[j + 1] = temp;
                }
            }
            System.out.println(Arrays.toString(source));
        }
    }

    /**
     * 偷懒
     * @param source 数组
     */
    public static void sortPlus(int[] source) {

        // 冒泡排序，主要思想是把小的数网数组最后丢，范围从后往前回缩
        int temp = 0;
        // 标志位，如果有一次遍历没有发生进行交换，说明其实这个顺序已经可以了
        boolean flag = false;
        // 控制范围
        for (int i = 0; i < source.length; i++) {
            for (int j = 0; j < source.length - 1 - i; j++) {
                // 和后面的元素比较，把小的数送到最后
                if (source[j] < source[j + 1]) {
                    // 进行了交换
                    flag = true;
                    temp = source[j];
                    source[j] = source[j + 1];
                    source[j + 1] = temp;
                } else {
                    // 没有进行交换
                    flag = false;
                }
            }
            System.out.println(Arrays.toString(source));
            // 看一下有没有进行交换
            if (!flag) {
                break;
            } else {
                // 重置一下
                flag = false;
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {11, 44, 9, 22, 1};
        BubbleSort.sort(arr);
    }

}
